package gob.pe.inei.esvit.lib.db;

import gob.pe.inei.esvit.lib.type.ColumnType;

import java.io.Serializable;
import java.util.List;

public interface GenericDAO<T, PK extends Serializable> {

	List<T> findAll(Class<T> typeClass);

	T findByPK(Class<T> typeClass, PK id);

	void update(T object);

	void remove(T object);

	void insert(T object);

	List<T> getPaginated(Class<T> typeClass, int startPosition, int maxResult);

	List<T> getOrderedPaginated(Class<T> typeClass, int startPosition,
			int maxResult, String order, int dir);

	List<T> findAllByExample(Class<T> typeClass, T object);

	List<T> findAllBy(Class<T> typeClass, ColumnType type, Object value);
}
